這次要來說明Hex在存放時為什麼是顛倒的。
這是記憶體排放順序的問題,目前常用的記憶體排放順序主要有兩種,大端序(Big Endian)和小端序(Little Endian),簡單來說,大端序是指數據按照從高位到低位的順序存儲在記憶體中,而小端序則是將數據按照從低位到高位的順序存儲。
假設有一個24位元的數字0x123456,如果使用大端序,這個數字在記憶體中會被存儲為0x12 0x34 0x56,如果使用小端序,它則會被存儲為0x56 0x34 0x12。
可以看到,小端序(Little Endian)並不是直接0x65 0x43 0x21的方式擺放,而是根據8位元(1 Byte)為單位進行逆序排列,對於 24 位元(3 Bytes)的數字 0x123456,小端序的存放順序會是 0x56 0x34 0x12,這是因為它按照每個位元組來逆序排列,而 32 位元或 64 位元數據則會根據其自身大小進行相應的逆序排列,而這次的程式是64位元的程式,因此擺放的字共8個Bytes,也就是會用到8個格子。
這樣就能夠解釋為什麼放入RAX中的值會是反著的了,我們在大部分的情況下,都會遇到端序的問題,比如在網路上傳輸的資料就會碰到Big Endian的情況。
放入RAX後的暫存器長這樣